package com.hyper_yang._01_jdbc.dql;

import com.hyper_yang._01_jdbc.pojo.Account;
import com.hyper_yang._01_jdbc.utils.JDBCUtil;
import org.junit.jupiter.api.Test;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/*
 ORM: Object Relational Mapping 对象关系映射
    O: java中的对象
    R: 关系型数据库
    M: 将 R和 O做映射
  数据库中的一张表对应java中的一个类，实体类: JavaBean/entity/pojo
  表中的列对应类的属性 id -> Integer id;
  表中的一行数据对应实体类的一个对象
 */
public class ORMTest {
    @Test
    public void test1() throws ClassNotFoundException, SQLException {
        // 注册驱动
//        Class.forName("com.mysql.cj.jdbc.Driver");
        // 获取连接
//        Connection connection = DriverManager.getConnection("jdbc:mysql:///test1", "root", "abc123");
        Connection connection = JDBCUtil.getConnection();
        // 准备 sql
        String sql = "select id,name,balance from t_account";
        // 准备发射器
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        // 执行 sql,获取结果集
        ResultSet resultSet = preparedStatement.executeQuery();
        // 处理结果集
        List<Account> list = new ArrayList<>();
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            int balance = resultSet.getInt("balance");
            // 将一行数据封装成一个 java对象，列的值就是对象的属性值
            Account account = new Account(id, name, balance);
            list.add(account);
        }
        list.stream()
                .filter(account -> account.getBalance() > 1000)
                .forEach(System.out::println);
        // 释放资源
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }
}
